Multi-threaded packet processors are used to provide a simpler instruction execution pipeline which serves to eliminate pipeline hazards, resource conflicts, branch delays, pipeline stalls, and pipeline stage bypasses. Multi-threaded packet processors also provide a simpler programming model by hiding memory access latencies, hiding coprocessor latencies, eliminating branch delays, and removing operand dependencies. Further, the use of multi-threaded packet processors produces better utilization of available memory bandwidth and better utilization of coprocessors. As part of packet processing, there are certain features that can, by configuration, be enabled or disabled. When the feature is enabled then a routine related to the feature is executed, otherwise it is ignored.